<?php

/**
 * UsuarioService
 *
 * Acessa o Dao e o Repositorio do Usuario e disponibiliza a outras
 * classes metodos (Servicos) que precisam.
 *
 */
class UsuarioService extends Model {

    /**
     * @var UsuarioDao
     */
    private $usuarioDao;

    public function injectDependencies() {
        $this->usuarioDao = UsuarioDao::getInstance();
    }

    public function reload() {
        $Usuario = $this->findById(Dracosys::getLoggedUser()->getIDUsuario());
        Dracosys::saveSessionValue(SESSION_SYSTEM, 'Usuario', $Usuario);
    }

    /**
     * @method  findAll
     *
     * Retorna os dados necessarios para uma listagem simples de usuarios
     *
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     * @return  array
     * @since   2011-12-05
     */
    public function findAll($AsSimple = false) {
        return $this->usuarioDao->findAll($AsSimple);
    }

    /**
     * @method  findUserByStatus
     *
     *
     *
     * @method  findUsersByStatus
     * @param   string    $StStatus
     * @return  Usuario
     */
    public function findByStatus($StStatus) {
        return $this->usuarioDao->findUsersByStatus($StStatus);
    }

    /**
     *
     *
     * @method  findUserById
     * @param   int     $IDUsuario
     * @return  Usuario
     */
    public function findById($IDUsuario) {
        return $this->usuarioDao->findById($IDUsuario);
    }

    //07-04
    public function updatePessoalData($ArDados) {
        return $this->usuarioDao->updatePessoalData($ArDados);
    }

    public function changePassword($StNovaSenha) {
        return $this->usuarioDao->changePassword($StNovaSenha);
    }

    public function updatePreferences($ArPreferencias) {
        return $this->usuarioDao->updatePreferences($ArPreferencias);
    }

    public function findBySector($IDSetor) {
        return $this->usuarioDao->findUserBySector($IDSetor);
    }

    public function changeSector($ArIdUsersToChangeSector) {
        foreach($ArIdUsersToChangeSector as $IDUsuario => $IDSetor) {
            if( !$this->usuarioDao->changeSector($IDUsuario, $IDSetor) ) {
                return false;
            }
        }
        return true;
    }

    public function dismissService($ArDismiss) {
        foreach($ArDismiss as $IDUsuario) {
            if( !$this->usuarioDao->dismiss($IDUsuario) ) {
                return false;
            }
        }
        return true;
    }

    public function findByPosition($IDFuncao) {
        return $this->usuarioDao->findByPosition($IDFuncao);
    }

    public function changePosition($ArUsers) {
        return !empty($ArUsers) ? $this->usuarioDao->changePosition($ArUsers) : true;
    }

    public function findByProfile($IDPerfil) {
        return $this->usuarioDao->findByProfile($IDPerfil);
    }

    public function changeProfile($ArProfilesIds) {
        return !empty($ArProfilesIds) ? $this->usuarioDao->changeProfile($ArProfilesIds) : true;
    }

    public function findUsersWithPendingPayment() {
        return $this->usuarioDao->findUserWithPendingPayment();
    }

    public function findUsersInTimelyPayment() {
        return $this->usuarioDao->findUserInTimelyPayment();
    }

    public function findSimpleUserById($IDUsuario) {
        return $this->usuarioDao->findSimpleUserById($IDUsuario);
    }

}

?>
